ECR のクロスアカウントアクセスで暗黙的な拒否が発生する場合はリソース名も確認しよう
アノテーション・テクニカルサポートチームの hato です。
クロスアカウントの ECR へのアクセスがリソースベースポリシーの「暗黙的な拒否」で失敗する事象について調べる機会がありましたので、小ネタとしてご紹介します。
アクセス拒否エラーメッセージをトラブルシューティングする - AWS Identity and Access Management
リソースベースのポリシーによるアクセスの拒否 – 暗黙的な拒否
まとめ
- 同一アカウントで存在しない ECR リポジトリへのアクセスは、存在しない旨のエラーとなる
- 別アカウントで存在しない ECR リポジトリへのアクセスは、リソースベースポリシーの暗黙的拒否となる
- クロスアカウントでエラーが発生した際は、指定したリポジトリ名も再確認する
同一アカウントで存在しない ECR リポジトリを指定した場合
EC2 等から同一 AWS アカウント内の存在しない ECR リポジトリに対してdocker push/pull
を行うと、リソースが存在しない旨のエラーが発生します。
$ docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hato-repository:latest
The push refers to repository [123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hato-repository]
75654b8eeebd: Preparing
name unknown: The repository with name 'hato-repository' does not exist in the registry with id '123456789012'
$ docker pull 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hato-repository:latest
Error response from daemon: repository 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hato-repository not found: name unknown: The repository with name 'hato-repository' does not exist in the registry with id '123456789012'
別アカウントで存在しない ECR リポジトリを指定した場合
別 AWS アカウントの EC2 等から存在しない ECR リポジトリに対してdocker push/pull
を行うと、リソースベースポリシーの暗黙的な拒否が発生します。
$ docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hato-repository:latest
The push refers to repository [123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hato-repository]
abc123def456: Preparing
denied: User: arn:aws:iam::123456789012:user/hato is not authorized to perform: ecr:InitiateLayerUpload on resource: arn:aws:ecr:ap-northeast-1:123456789012:repository/hato-repository because no resource-based policy allows the ecr:InitiateLayerUpload action
$ docker pull 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hato-repository:latest
Error response from daemon: pull access denied for 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hato-repository, repository does not exist or may require 'docker login': denied: User: arn:aws:iam::123456789012:user/hato is not authorized to perform: ecr:BatchGetImage on resource: arn:aws:ecr:ap-northeast-1:123456789012:repository/hato-repository because no resource-based policy allows the ecr:BatchGetImage action
確認すべきはリポジトリポリシーだけではないかも
クロスアカウントの場合、ECR のリポジトリポリシーも設定する必要があります。
エラーメッセージからリポジトリポリシーが原因と推測されますが、存在しないリポジトリを指定している場合も上記のエラーが発生します。
そのため、エラーの際はリポジトリポリシーだけではなく、コマンドで指定したリソース名も確認観点となります。
最後に
挙動を把握していればすぐに確認できる観点ですが、把握していないと行き詰まる可能性があります。
リソースベースポリシーの「暗黙的な拒否」が発生した場合は、リポジトリポリシーだけではなく、コマンドで指定したリソース名もご確認ください。
この記事が誰かのお役にたてば幸いです。
参考資料
- アクセス拒否エラーメッセージをトラブルシューティングする - AWS Identity and Access Management
- Amazon ECR でのプライベートリポジトリポリシー - Amazon ECR
- セカンダリアカウントで Amazon ECR イメージリポジトリのイメージをプッシュまたはプルできるようにする | AWS re:Post
アノテーション株式会社について
アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイト をぜひご覧ください。